From 939f9bc0fbf7c9aa55b90c953213444c92b307a5 Mon Sep 17 00:00:00 2001 From: Bernd Zeimetz Date: Tue, 20 Jan 2009 15:13:01 +0100 Subject: [PATCH] Adding patch to read/write doubles on arm. --- debian/patches/arm_double_read_write | 45 ++++++++++++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 46 insertions(+) create mode 100644 debian/patches/arm_double_read_write diff --git a/debian/patches/arm_double_read_write b/debian/patches/arm_double_read_write new file mode 100644 index 000000000..575e516e9 --- /dev/null +++ b/debian/patches/arm_double_read_write @@ -0,0 +1,45 @@ +c4b8e6f83f3e207ff57259307bdb4fc6e49b5881 +diff --git a/util.c b/util.c +index 92fd724..3412d6b 100644 +--- a/util.c ++++ b/util.c +@@ -968,8 +968,15 @@ endian_read_double(void* ptr, int read_le) + } + p = r; + } +- ++ ++// Word order is different on arm, but not on arm-eabi. ++#if defined(__arm__) && !defined(__ARM_EABI__) ++ memcpy(&ret, p + 4, 4); ++ memcpy(((void *)&ret) + 4, p, 4); ++#else + memcpy(&ret, p, 8); ++#endif ++ + return ret; + } + +@@ -999,12 +1006,20 @@ endian_read_float(void* ptr, int read_le) + void + endian_write_double(void* ptr, double d, int write_le) + { +- char *r = (char *)(void *)&d; + int i; + char *optr = ptr; ++// Word order is different on arm, but not on arm-eabi. ++#if defined(__arm__) && !defined(__ARM_EABI__) ++ char r[8]; ++ memcpy( r + 4, &d, 4); ++ memcpy( r, ((void *)&d) + 4, 4); ++#else ++ char *r = (char *)(void *)&d; ++#endif ++ + + if ( i_am_little_endian == write_le ) { +- memcpy( ptr, &d, 8); ++ memcpy( ptr, r, 8); + } + else { + for (i = 0; i < 8; i++) diff --git a/debian/patches/series b/debian/patches/series index e4088a855..db8ed4eaf 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,2 +1,3 @@ osm-char-int-cast-bug-fix no-gpsbabel-pdf +arm_double_read_write -- 2.30.2